package common;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import db.DBManager;
/**
 * 顧客情報を取得するクラス
 * @author matsumoto
 *
 */
public class Customer 
{
	private int id;
	private String code;
	private String name;
	private String pass;
	private String postcode;
	private String address;
	private String card;
	private String tel;
	private int on_off;
	private String text;
	
	/**
	 * 顧客コードで検索し、顧客情報を取得する。
	 * @param code 顧客コード
	 * @return	顧客情報
	 */
	public static Customer find_by_code(String code)
	{
		Connection con = DBManager.getConnection();
//		・顧客コードを受け取り、顧客情報テーブルから該当する情報を検索し顧客情報を返す。
//		・ただし、該当する顧客が登録されていない場合はNULLを返す。
		Customer c = null;
//		・顧客コードが7桁以外の場合はNULLを返す。
		if(code.length() == 7)
		{
			try
			{
				String sql = "select *"
						+ " from customer"
						+ " where code =" + code;
				Statement stm = con.createStatement();
				ResultSet rs = stm.executeQuery(sql);
				if(rs.next())
				{
					c = new Customer();
					c.setId(rs.getInt("id"));
					c.setCode(rs.getString("code"));
					c.setName(rs.getString("name"));
					c.setPass(rs.getString("pass"));
					c.setPostcode(rs.getString("postcode"));
					c.setAddress(rs.getString("address"));
					c.setCard(rs.getString("card"));
					c.setTel(rs.getString("tel"));
					c.setOn_off(rs.getInt("on_off"));
				}
				rs.close();
				stm.close();
				con.close();
			}
			catch(SQLException e)
			{
				e.printStackTrace();
			}
		}
		return c;
	}
	
	/**
	 * 名前、住所、電話番号で検索し、顧客情報を取得する。
	 * @param name 顧客名
	 * @param address 顧客住所
	 * @param tel 顧客電話番号
	 * @return 顧客情報の配列
	 */
	public static List<Customer>  find_by(String name, String address, String tel)
	{
		Connection con = DBManager.getConnection();
		if(name == null) name = "";
		if(address == null) address = "";
		if(tel == null) tel = "";
//		・名前又は住所又は電話番号を受け取り、顧客情報テーブルから部分一致で該当する情報を検索し顧客情報の配列を返す。
//		・ただし、該当する顧客情報が登録されていない場合はNULLを返す。
//		・未入力のデータにはNULLを渡し、入力されたものだけを検索条件(&)で検索する。
		List<Customer> list = null;
		try
		{
			String sql = "select * from customer where name like '%" + name
					+ "%' and address like '%" + address
					+ "%' and tel like '%" + tel
					+ "%'";
			Statement stm = con.createStatement();
			ResultSet rs = stm.executeQuery(sql);
			while(rs.next())
			{
				if(list == null) list = new ArrayList<Customer>();
				Customer c = new Customer();
				c.setId(rs.getInt("id"));
				c.setCode(rs.getString("code"));
				c.setName(rs.getString("name"));
				c.setPass(rs.getString("pass"));
				c.setPostcode(rs.getString("postcode"));
				c.setAddress(rs.getString("address"));
				c.setCard(rs.getString("card"));
				c.setTel(rs.getString("tel"));
				c.setOn_off(rs.getInt("on_off"));
				list.add(c);
			}
			rs.close();
			stm.close();
			con.close();
		}
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		return list;
	}
	
	public static void change_pass(String pass, String code){
		Connection con = DBManager.getConnection();
		String sql = "update customer set pass = ? where code = ?";
		
		try{
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setString(1, pass);
			ps.setString(2, code);
			ps.executeUpdate();
			ps.close();
			con.close();
		}
		catch(SQLException e){
			e.printStackTrace();
		}
	}
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public String getPostcode() {
		return postcode;
	}
	public void setPostcode(String postcode) {
		this.postcode = postcode;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getCard() {
		return card;
	}
	public void setCard(String card) {
		this.card = card;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	public int getOn_off() {
		return on_off;
	}
	public void setOn_off(int on_off) {
		this.on_off = on_off;
	}
	public String getText() {
		return text;
	}
	public void setText(String text) {
		this.text = text;
	}
	
}
